package com.zxl.test;

import java.util.BitSet;
import java.util.HashMap;

public class JudgePhoneDemo {
    /**
     * create by:
     * description: 已知某个文件内包含一些电话号码，每个号码是8个数字，统计不同号码的个数
     * 解决方法：8位最多99999999.占用100000000个bit，大小为12m，这样用12m内存就可以表示所有8位数号码
     * 但是某个文件包含一些11个数字的手机号，又要怎么处理
     * @Param: args
     * @Return:  void
     */
    static HashMap<String, BitSet[]> hashMapNote = new HashMap<>();

    static {
        hashMapNote.put("173",new BitSet[99999999]);
        hashMapNote.put("150",new BitSet[99999999]);
        hashMapNote.put("132",new BitSet[99999999]);

    }

    public static void m5(String phone) {
        String phoneSegment = phone.substring(0, 3);
        BitSet[] bitSetArray = hashMapNote.get(phoneSegment);

        String after8Number = phone.substring(3);
        Integer intAfter8Number = Integer.parseInt(after8Number);

        //首先获取这个号码段的所有号码
        if (bitSetArray != null) {
            BitSet bitSet = new BitSet();
            bitSet.set(intAfter8Number, true);
            bitSetArray[intAfter8Number] = bitSet;
            if (hashMapNote.containsKey(phoneSegment)) {
                BitSet[] bitSets = hashMapNote.get(phoneSegment);
                if (bitSets[intAfter8Number].get(intAfter8Number)) {
                    System.out.println("号码存在");
                } else {
                    System.out.println("号码不存在");
                }
            } else {
                System.out.println("非合法号码");
            }
        } else {
            System.out.println("号码不存在");
        }
    }
    public static void main(String[] args) {
     m5("17395090586");
    }
}
